<?php

require_once 'database\DBConnection.php';

class LoginHandler {
	//konstanter
	const UserName = "username";
	const Password = "password";
	private $DBConnection = NULL;
	
	public function __construct(DBConnection $connection){
		$this->DBConnection = $connection;
	}
	
	
	//Är inloggad om sessionen har rätt userName
	public function IsLoggedIn() {
		if (isset($_SESSION[self::UserName])) {
			return TRUE;
		}
	}
	
	// Returnerar sessionens användarnamn
	public function GetLoggedInUserName() {
		$_SESSION[self::UserName];
		return $_SESSION[self::UserName];
	}

	//Inloggad i databasen
	public function DoLoginDB($name, $password) {
		
		$sql = "SELECT pk FROM user WHERE m_username = ?  AND m_password = ?";

		$stmt = $this->DBConnection -> Prepare($sql);
		
		//binder två strängar till name och password
		$stmt->bind_param("ss", $name, $password);
		

		if ($stmt === FALSE) {
			echo("prepare of '$sql' failed " . $DBConnection -> error);
			return false;
		}

		$stmt -> execute();

		$result = $stmt -> get_result();

		$userExists = false;
		
		while ($row = $result -> fetch_array(MYSQLI_NUM)) {
			$userExists = true;
		}
		$stmt -> close();

		return $userExists;
	}
	

	//Logga in i databasen
	public function DoLogin($name, $password) {

		$userExists = $this -> DoLoginDB($name, $password);
		
		//Sätter sessionen om användaren finns
		if ($userExists!==FALSE) {
			$_SESSION[self::UserName] = $name;
			$_SESSION[self::Password] = $password;

			return TRUE;
		} else {
			return FALSE;
		}

	}

	//loggar ut sessionen
	public function DoLogout() {
		unset($_SESSION[self::UserName]);
	}

	//--------------------------------Test--------------------------------------------
	public function Test() {
		//-------------------Försätter mig i utloggat tillstånd----------------
		$this -> DoLogout();

		//Kollar om jag är inloggad (vilket jag inte borde vara)
		if ($this -> IsLoggedIn()) {
			echo "INLOGGAD fast jag inte borde vara det!";
			return FALSE;
			//Annars är jag fortfarande inte inloggad (vilket jag inte borde vara)
		}

		//loggar in med FEL lösen
		if ($this -> DoLogin('karolina', 'fel lösenord')) {
			echo "testar Dologin med FEL anv. lös och den returerar true vilket den inte borde)";
			return FALSE;
		}

		//Kollar om jag är inloggad (vilket jag inte borde vara)
		if ($this -> IsLoggedIn()) {
			echo "Kollar om jag är inloggad (vilket jag inte borde vara)";
			return FALSE;
			//Annars är jag fortfarande inte inloggad (vilket jag inte borde vara)
		}

		//-------------------Loggar ut---------------------
		$this -> DoLogout();
		//För säkerhets skull...

		if (!$this -> DoLogin('klas', 'klas')) {
			echo "</br>(testar DoLogin skillt från rätt anv. lös VERSION2)";
			return FALSE;
		}

		//Kollar om jag är inloggad (vilket JAG BORDE VARA HÄR...)
		if ($this -> IsLoggedIn() == false) {
			echo "Fel på isloggedin, efter dologin med rätt uppgifter!";
			return FALSE;
			//Annars är jag fortfarande inte inloggad
		}
		//-------------------Loggar ut---------------------
		$this -> DoLogout();
		//För säkerhets skull...

		//Kollar om jag är inloggad (vilket jag inte borde vara)
		if ($this -> IsLoggedIn()) {
			echo "INLOGGAD fast jag inte borde vara det!";
			return FALSE;
			//Annars är jag fortfarande inte inloggad (vilket jag inte borde vara)
		}

		/*
		 $this -> DoLogout();

		 if ($this -> DoLoginDB($name, $password)==TRUE) {
		 echo "</br>(testar rätt anv och lösen med DoLoginDB)";
		 return FALSE;
		 }
		 */

		return TRUE;

	}

}
